//
//  YTFHomeViewController.swift
//  sinaWeibo
//
//  Created by pro on 16/2/25.
//  Copyright © 2016年 pro. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

let REUSEID = "cell"
class YTFHomeViewController: YTFBasicTableViewController {
    
//    //定义一个数组来接收关注对象的微博信息
//    var array: [YTFStatusModel] = [YTFStatusModel]()
    
    //实例化一个viewModel
    var statusListViewModel: YTFStatusListViewModel?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
//        print("调用了这个方法")
        

        visitor?.setInfo("关注一些人，回这里看看有什么惊喜", image: nil, animation: true)
            
        //判断需要在已经登录的情况下发送网路请求，并且更新tableview
        if isLogin{
            
            statusListViewModel = YTFStatusListViewModel()
            
            loadData()
            //reason: 'unable to dequeue a cell with identifier cell - must register a nib or a class for the
            //必须先注册cell，要不然会找不到这个cell，程序崩溃
            /*
            cellClass: AnyClass? -> UITableViewCell.self
            */
            tableView.registerClass(YTFHomeTableViewCell.self, forCellReuseIdentifier: REUSEID)
            
            //设置固定高度
//            tableView.rowHeight = 100
            
            //自动设置行高
            tableView.rowHeight = UITableViewAutomaticDimension
            //设置预估行高---必须要设置的
            tableView.estimatedRowHeight = 80
            
            //添加菊花转的效果给footerView
            tableView.tableFooterView = activityView
            
//            //让菊花转动，查看效果
//            activityView.startAnimating()
            
            //创建一个实例添加到视图中
            tableView.addSubview(refreshView)
            
            //给refreshView添加事件
            refreshView.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
            
            
        }
        
    }
    
    
    //加载数据
    func loadData(){
        
        SVProgressHUD.show()
        
        //下拉更多，改变since_id，而max_id = 0
        
        //上提更多，需要把since_id = 0
        var since_id = statusListViewModel?.array.first?.statusModel?.id ?? 0
        
        //获取max_id
        var max_id = 0
        
        if activityView.isAnimating() {
            
            //需要把since_id = 0
            since_id = 0
            
            //获取最后一条数据的id
            max_id = statusListViewModel?.array.last?.statusModel?.id ?? 0
            //因为根据max_id返回的微博id是小于等于的，所以我们把max_id再减一
            max_id -= 1
        }
        
        //加载数据
        statusListViewModel?.loadData(since_id, max_id: max_id, finish: { (count: Int) -> () in
            
            //刷新数据
            self.tableView.reloadData()
            
            //判断菊花动画在转的时候是上提更多,其他时候都可以显示刷新的条数
            if !self.activityView.isAnimating(){
                //显示数据刷新
                self.showNewCount(count)
            }
            
            //还原加载标记，即把菊花动画取消
            self.activityView.stopAnimating()
            
            SVProgressHUD.dismiss()
            
            self.refreshView.endRefreshing()
        })
 
    }
    
    
    //显示刷新提示
    private func showNewCount(count: Int){
        
        //创建一个视图
        let showMessageLabel = UILabel(frame: CGRectMake(0,64 - 44,kUIScreenWidth,44))
        
        //设置属性
        showMessageLabel.backgroundColor = UIColor.orangeColor()
        
        if count > 0{
            showMessageLabel.text = "更新了\(count)条微博"
            
        }else{
            showMessageLabel.text = "暂无更新"
        }
        
        showMessageLabel.textAlignment = .Center
        
        showMessageLabel.textColor = UIColor.blackColor()
        
        showMessageLabel.font = UIFont.systemFontOfSize(16)
        
        //添加到视图
        self.navigationController?.view.insertSubview(showMessageLabel, belowSubview: (navigationController?.navigationBar)!)
        
        //添加一个动画
        UIView.animateWithDuration(2, animations: { () -> Void in
            showMessageLabel.transform = CGAffineTransformMakeTranslation(0, 44)
            }) { (_) -> Void in
                //动画完成之后隐藏
                UIView.animateWithDuration(2, animations: { () -> Void in
                    //回到原点的动画
                    showMessageLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        //销毁或者隐藏
                        showMessageLabel.removeFromSuperview()
                })
        }
    }
    

    //懒加载一个菊花转的效果
    private lazy var activityView: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
    
    //懒加载一个下拉的视图
    private lazy var refreshView: YTFRefreshView = YTFRefreshView()

}


//UITabbleViewController的数据源方法
extension YTFHomeViewController{
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel?.array.count ?? 0
    }
    
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(REUSEID, forIndexPath: indexPath) as! YTFHomeTableViewCell
        
//        cell.textLabel?.text = statusListViewModel?.array[indexPath.row].text
//        cell.textLabel?.text = statusListViewModel?.array[indexPath.row].statusModel?.text
        cell.statusViewModel = statusListViewModel?.array[indexPath.row]
        
        //在创建cell的时候，判断一下cell的indexPath.row
        //在菊花转动的时候，这个时候是数据加载的状态，不能让它重复加载
        if indexPath.row == (statusListViewModel!.array.count - 1) && !activityView.isAnimating(){
            print("加载数据")
            //请求数据
            //先转动在加载数据
            activityView.startAnimating()
            
            loadData()
        }
        
        return cell
    }
    
    

}




